@不喜丶不悲
3年前 提问
1个回答

Scapy 怎么定制 tcp 协议 syn 请求

安全小白成长记
3年前

Scapy使用TCP的方法:1. 使用内核的TCP堆栈;2. Scapy的TCP客户端自动机;3. 使用外部项目。

Scapy简介

Scapy的是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或解码大量的网络协议数据包,能够发送,捕获,匹配请求和回复包等等。它可以很容易地处理一些典型操作,例如端口扫描,tracerouting,探测,单元测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,tereal,P0F等)的特性-发送无效数据帧,注入修改的802.11数据帧,在WEP上解码加密通道(VOIP),ARP缓存攻击(VLAN)等,这也是其他工具无法处理完成的。

Scapy使用TCP的方法

  1. 使用内核的TCP堆栈

Scapy提供了一个StreamSocket对象,该对象可以将简单的套接字转换为适合与sr()命令系列一起使用的Scapy超级套接字。

s=socket.socket()
s.connect(("www.test.com",80))
ss=StreamSocket(s,Raw)
ss.sr1(Raw("GET /\r\n"))
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<Raw  load='<html>\r\n<head> ... >

使用内核的TCP堆栈意味着您将依赖于本地防火墙的规则和内核的路由表。

  1. Scapy的TCP客户端自动机

Scapy提供了一个简单的TCP客户端自动机(没有重新传输,没有SAck,没有时间戳等)。Automata可以以超级套接字的形式提供输入和输出。

这是使用Scapy的TCP客户端自动机的方法(至少需要Scapy v2.1.1)。

笔记

s = TCP_client.tcplink(Raw, "www.test.com", 80)
s.send("GET /\r\n")
7
s.recv()
<Raw  load='<html>\r\n<head> ... >

笔记

专门用于HTTP,您可以传递HTTP而不是Raw

  1. 使用外部项目
  • muXTCP-编写自己的灵活的Userland TCP / IP堆栈- Ninja 风格!!!

  • 整合pynids